package Static_;
//当方法中不涉及任何对象及成员的时候，可以将其设计成静态方法，提高开发效率
public class staticmethod_ {
    public static void main(String[] args) {
        Stu jack = new Stu("jack");
        jack.payFee(100);
        Stu.payFee(200);


        Stu lihua = new Stu("lihua");
        lihua.payFee(300);

        Stu.showFee();

        //如果我们不创建实例，也可以调用某个方法，即当做工具来使用
        //这时，把方法设计成静态方法比较合适
        System.out.println("9开方"  + Math.sqrt(9));

        System.out.println(MyTools.Sum(10.22,3.56));

    }
}

//开发自己的工具类时，可以做成静态的，方便实用
class MyTools{
    private int n1 = 100;
    private static int count = 100;

    public static double Sum(double n1,double n2){
    return n1 + n2;
    }


    //类方法中不允许使用和对象有关的关键字，
    //比如this和super。
    public static void say(){
        //System.out.println(this.n1); //err
    }


    //静态方法中，只能访问静态方法或者静态变量
    public static void hi(){
        System.out.println(count);
        System.out.println(MyTools.count);
        say();//静态方法
    }

    //普通方法，既可以访问静态方法和变量，也可以访问普通方法和变量
    public void ok(){
        //静态
        hi();
        System.out.println(count);
        //非静态
        System.out.println(n1);
    }



}


class Stu{
    private String name;

    private static double fee = 0;

    public Stu(String name) {
        this.name = name;
    }

    public static void payFee(double fee){
        Stu.fee += fee;
    }

    public static void showFee(){
        System.out.println("总学费为:" + Stu.fee);
    }
    public void ok(){

    }
}
